#!/usr/bin/env python3
"""
数据库迁移脚本 - 创建 daily_records 表
用于存储每日的历史数据（销售额、注册数、订单数等）
"""

import sqlite3
from datetime import datetime


def create_daily_records_table():
    """创建 daily_records 表"""
    conn = sqlite3.connect("predictions.db")
    cursor = conn.cursor()

    try:
        # 检查表是否已存在
        cursor.execute("""
            SELECT name FROM sqlite_master 
            WHERE type='table' AND name='daily_records'
        """)

        if cursor.fetchone():
            # 如果表已存在，删除并重新创建以确保正确的约束
            print("daily_records 表已存在，删除并重新创建...")
            cursor.execute("DROP TABLE daily_records")

        # 创建 daily_records 表，使用正确的复合唯一约束
        cursor.execute("""
            CREATE TABLE daily_records (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                date_str VARCHAR(10) NOT NULL,
                order_sum INTEGER NOT NULL,
                reg_count INTEGER NOT NULL,
                order_count INTEGER NOT NULL,
                product_name VARCHAR(50) NOT NULL,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                UNIQUE(date_str, product_name)
            )
        """)

        # 创建索引以提高查询性能
        cursor.execute("""
            CREATE INDEX idx_daily_records_date_product 
            ON daily_records(date_str, product_name)
        """)

        cursor.execute("""
            CREATE INDEX idx_daily_records_product 
            ON daily_records(product_name)
        """)

        cursor.execute("""
            CREATE INDEX idx_daily_records_date 
            ON daily_records(date_str)
        """)

        # 提交更改
        conn.commit()
        print("daily_records 表创建成功！")

    except Exception as e:
        conn.rollback()
        print(f"创建 daily_records 表失败: {str(e)}")
        raise
    finally:
        conn.close()


def check_database_status():
    """检查数据库状态"""
    conn = sqlite3.connect("predictions.db")
    cursor = conn.cursor()

    try:
        # 列出所有表
        cursor.execute("""
            SELECT name FROM sqlite_master 
            WHERE type='table' 
            ORDER BY name
        """)
        tables = cursor.fetchall()

        print("数据库中的表:")
        for table in tables:
            print(f"  - {table[0]}")

        # 检查 daily_records 表结构
        if any("daily_records" in table for table in tables):
            cursor.execute("PRAGMA table_info(daily_records)")
            columns = cursor.fetchall()
            print("\ndaily_records 表结构:")
            for col in columns:
                print(f"  {col[1]} {col[2]} {'NOT NULL' if col[3] else 'NULL'}")

            # 查看索引信息
            cursor.execute("PRAGMA index_list(daily_records)")
            indexes = cursor.fetchall()
            print("\n索引:")
            for idx in indexes:
                print(f"  - {idx[1]} ({'UNIQUE' if idx[2] else 'NON-UNIQUE'})")

    except Exception as e:
        print(f"检查数据库状态失败: {e}")
    finally:
        conn.close()


if __name__ == "__main__":
    print("开始数据库迁移...")
    print("=" * 50)

    # 创建表
    create_daily_records_table()

    print("\n" + "=" * 50)
    print("检查数据库状态...")

    # 检查状态
    check_database_status()

    print("\n数据库迁移完成！")
